package app.objectstoragedemo.Pojo;


import app.objectstoragedemo.Pojo.Exception.StatusCode;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result<T> {
    /**
     * 响应码:
     * 200 StatusCode.SUCCESS_CODE: 请求成功代码。
     * 400 StatusCode.BAD_REQUEST: 请求参数无效。
     * 401 StatusCode.UNAUTHORIZED: 缺少或无效的 API 密钥.
     * 402 StatusCode.MISSING_PARAMETER: 缺少参数..
     * 404 StatusCode.NOT_FOUND: 未找到指定的资源。
     * 500 StatusCode.ERROR_CODE: 服务器内部错误。
     **/
    private StatusCode code;        // 响应码

    private boolean success; // 操作是否成功
    //提示信息
    private String message;  // 返回的信息

    private T data;          // 返回的数据


    // 静态方法便于快速创建成功和失败的响应
    //  成功 请求成功代码
    public static <T> Result<T> success(T data) {
        Result<T> result = new Result<>();
        result.setSuccess(true);
        result.setData(data);
        result.setCode(StatusCode.SUCCESS_CODE);
        result.setMessage("操作成功");
        return result;
    }
    // 成功 请求成功代码 并 添加成功信息
    public static <T> Result<T> success(String Message, T data) {
        Result<T> result = new Result<>();
        result.setSuccess(true);
        result.setData(data);
        result.setCode(StatusCode.SUCCESS_CODE);
        result.setMessage(Message);
        return result;
    }

    // 失败 请求参数无效
    public static <T> Result<T> failure(String message) {
        Result<T> result = new Result<>();
        result.setSuccess(false);
        result.setCode(StatusCode.BAD_REQUEST);
        result.setMessage(message);
        return result;
    }
    //缺少参数
    public static <T> Result<T> missingParameter(String message) {
        Result<T> result = new Result<>();
        result.setSuccess(false);
        result.setCode(StatusCode.MISSING_PARAMETER);
        result.setMessage(message);
        return result;
    }

    // 失败 缺少或无效的 API 密钥
    public static <T> Result<T> unauthorized(String message) {
        Result<T> result = new Result<>();
        result.setSuccess(false);
        result.setCode(StatusCode.UNAUTHORIZED);
        result.setMessage(message);
        return result;
    }

    //未知 未找到指定的资源
    public static <T> Result<T> uncertain(String message) {
        Result<T> result = new Result<>();
        result.setSuccess(false);
        result.setCode(StatusCode.NOT_FOUND);
        result.setMessage(message);
        return result;
    }

    // 错误 服务器内部错误
    public static <T> Result<T> error(String message) {
        Result<T> result = new Result<>();
        result.setSuccess(false);
        result.setCode(StatusCode.ERROR_CODE);
        result.setMessage(message);
        return result;
    }


}